package com.ruoyi.attendance.utils;

import java.time.LocalDate;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Date;

public class DateRangeCalculator {
    private static final ZoneId DEFAULT_ZONE = ZoneId.of("Asia/Shanghai"); // 业务时区，可根据需求调整

    /**
     * 计算指定年月的日期范围（第一天到最后一天/今天）
     * @param year 年份
     * @param month 月份
     * @return 包含开始日期和结束日期的数组 [startDate, endDate]
     */
    public static Date[] calculateDateRange(int year, int month) {
        // 校验输入参数
        if (month < 1 || month > 12) {
            throw new IllegalArgumentException("月份必须在1-12之间");
        }

        // 获取当前日期
        LocalDate today = LocalDate.now(DEFAULT_ZONE);

        // 构建查询年月的YearMonth对象
        YearMonth queryMonth = YearMonth.of(year, month);

        // 计算开始日期（当月第一天）
        LocalDate startLocalDate = queryMonth.atDay(1);

        // 计算结束日期：如果查询月份是当前月，结束日期为今天；否则为当月最后一天
        LocalDate endLocalDate;
        if (queryMonth.equals(YearMonth.from(today))) {
            endLocalDate = today.minusDays(1); // 当月未结束，使用今天
        } else {
            endLocalDate = queryMonth.atEndOfMonth(); // 当月已结束，使用最后一天
        }

        // 转换为Date对象（精确到毫秒）
        Date startDate = Date.from(startLocalDate.atStartOfDay(DEFAULT_ZONE).toInstant());
        Date endDate = Date.from(endLocalDate.atTime(23, 59, 59, 999_999_999) // 当天最后一刻
                .atZone(DEFAULT_ZONE)
                .toInstant());

        return new Date[]{startDate, endDate};
    }

    // 示例使用
    public static void main(String[] args) {
        int year = 2025;
        int month = 6; // 假设当前是2025年4月15日

        Date[] range = calculateDateRange(year, month);
        System.out.println("开始日期: " + range[0]); // 2025-04-01 00:00:00
        System.out.println("结束日期: " + range[1]); // 2025-04-15 23:59:59

        month = 3; // 已过去的月份
        range = calculateDateRange(year, month);
        System.out.println("开始日期: " + range[0]); // 2025-03-01 00:00:00
        System.out.println("结束日期: " + range[1]); // 2025-03-31 23:59:59
    }
}